import router from "@/router";
import {useLoginUserStore} from "@/stores/useLoginUserStore";
import {message} from "ant-design-vue";

// 是否为首次登录用户
let firstFetchLoginUser = true;

/**
 * 全局权限校验逻辑（路由守卫）
 *
 */
router.beforeEach(async (to, from, next) => {
  //获取当前登录用户
  const loginUserStore = useLoginUserStore();
  // let loginUser = loginUserStore.loginUser;
// 确保页面刷新，首次加载时，能够等后端返回用户信息后再校验权限
  if(firstFetchLoginUser) {
    // 第一次登录用户，先获取后端信息；
    // 使用异步请求确保等到后端传回信息后再操作
    await loginUserStore.fetchLoginUser();
    firstFetchLoginUser = false;
  }
  // const toUrl = to.fullPath;
    const loginUser = loginUserStore.loginUser;
  //如果访问的url包含admin
  if(to.matched.some(record => record.meta.requiresAdmin)) {
    // 如果用户不是管理员或未登录状态
    if(loginUser.userName === '未登录') {
      message.error('无权限')
      // 跳转到登录页
      next('/user/login')
    } else if(loginUser.userRole !== 'admin') {
      message.error('无权访问')
      next('/noAuth')
    } else {
      next()
    }
    return
  }
  // 如果url包含space
  if(to.matched.some(record => record.meta.requiresAuth)) {
    if(loginUser.userName === '未登录') {
      message.error('请登录后使用')
      // 跳转到登录页
      next(`/user/login?redirect=${to.fullPath}`);
    } else {
      next();
    }
    return;
  }
  // 不满足条件即为管理员，放行
  next()
})
